package com.neu.table;

import java.util.ArrayList;

import javax.swing.table.AbstractTableModel;

import com.neu.dao.impl.ProblemDao;
import com.neu.pojo.Model;
import com.neu.pojo.Patient;
import com.neu.pojo.Problem;
import com.neu.service.IproblemService;
import com.neu.service.impl.ProblemService;


public class ProblemTable extends AbstractTableModel{//展示问题信息
	private String[] colNames = {"","问题ID","题目","题目类型"};//表头
	private Object[][] data;//数据
	
	//service
	IproblemService problemService = ProblemService.getInstance();
	
	public ProblemTable() {
		ArrayList<Problem> problems = ProblemDao.getInstance().list();//得到所有问题
		
		if(problems!=null&&problems.size()!=0) {//不是空
			this.data = new Object[problems.size()][colNames.length];//实例化二维数组
			for(int i=0;i<problems.size();i++) {//遍历集合，加载数据
				data[i][0] = new Boolean(false);//复选框
				data[i][1] = problems.get(i).getId();//id
				data[i][2] = problems.get(i).getProblem();//题目
				data[i][3] = problems.get(i).getType();//类型
			}
		}else {
			this.data = new Object[0][0];
		}
	}
	
	//删除
	public int delete() {
		int cnt=0;//表示要删除的个数
        for (int i=0;i<getRowCount();i++) {
			if ((boolean)data[i][0]) {//被选中了
				System.out.println(problemService.delete(new Problem((int)data[i][1])));//获取id 删除选中的问题
				cnt+=1;
			}
        }
        if(cnt == 0) {//没有选中的
        	return 0;
        }
        //文件中数据已经更改
        fireTableDataChanged();
	    Object[][] data2=new Object[getRowCount()-cnt][colNames.length];
	    int j=0;
	    for (int i=0;i<getRowCount();i++) {
			if (getValueAt(i,0).equals(false)) {//如果没选中
				data2[j][0]=new Boolean(false);
				data2[j][1]=data[i][1];
				data2[j][2]=data[i][2];
				data2[j][3]=data[i][3];
				j++;
			}	
		}
	    data=new Object[getRowCount()-cnt][colNames.length];
	    data=data2;
	    return cnt;		
	}
	
	//返回结果行数
	@Override
	public int getRowCount() {
		return this.data.length;
	}

	//返回结果列数
	@Override
	public int getColumnCount() {
		return this.colNames.length;
	}
	
	//获得对应列名
	@Override
	public String getColumnName(int column) {
		return this.colNames[column];
	}

	//每列对应的类型
	@Override
	public Class<?> getColumnClass(int columnIndex) {
		return data[0][columnIndex].getClass();
	}
	
	//返回哪行哪列对应的数据
	@Override
	public Object getValueAt(int rowIndex, int columnIndex) {
		return data[rowIndex][columnIndex];
	}
	
	/**
	 * 哪列不能编辑
	 * 返回false 不可编辑
	 */
	@Override
	public boolean isCellEditable(int rowIndex, int columnIndex) {
		if(columnIndex == 1) {
			return false;
		}else {
			return true;
		}
	}
	
	//修改表格中的数据
	@Override
	public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
		data[rowIndex][columnIndex] = aValue;
		/*修改表格数据后，显示改后结果*/
		fireTableCellUpdated(rowIndex, columnIndex);
	}

	@Override
	public void fireTableRowsDeleted(int firstRow, int lastRow) {
		super.fireTableRowsDeleted(firstRow, lastRow);
	}	
	
}
